import { getCookie } from "@/utils/auth";
import { download, getTemplate } from "@/api/project/common";
import { ElMessage } from "element-plus";
//使用源对象为目标对象赋值
export const assignObj = (target, source) => {
  for (let key in target) {
    if (key in source) {
      target[key] = source[key];
    }
  }
};

//下载文件
export const downloadFile = (data, name, type = "application/xlsx;charset=utf-8") => {
  const blob = new Blob([data], {
    type,
  });
  const downloadObj = document.createElement("a");
  const href = window.URL.createObjectURL(blob);
  downloadObj.href = href;
  downloadObj.download = name;
  document.body.appendChild(downloadObj);
  downloadObj.click();
  document.body.removeChild(downloadObj);
  window.URL.revokeObjectURL(href);
};
//执行文件下载
export const handleDownload = async (id, name) => {
  const res = await download(id);
  if (res.type != "application/json") {
    downloadFile(res, name, "");
  } else {
    ElMessage({
      message: "下载失败！",
      type: "error",
    });
  }
};
//下载模板文件
// export const handleDownTpl = async (name) => {
//   const res = await getTemplate(name);
//   downloadFile(res, name, "");
// };
export const handleDownTpl = (name) => {
  const a = document.createElement("a");
  a.href = `/template/${name}`;
  a.download = name;
  a.style.display = "none";
  document.body.appendChild(a);
  a.click();
  a.remove();
};
//获取当前用户角色key
export const getRoleKey = () => {
  return getCookie("role-key");
};
//判断当前用户角色是否属于某种角色
export const verifyRoleType = {
  isKyry: () => getRoleKey() == "biz_kyry", //是否是科研人员
  isKyms: () => getRoleKey() == "biz_kyms", //是否是科研秘书
  iskycgly: () => getRoleKey() == "biz_kycgly", //是否是科研管理员
  isKymsOrkycgly: () => ["biz_kycgly", "biz_kyms"].includes(getRoleKey()), //是否是科研秘书或者科研管理员
  isKyryOrkycgly: () => ["biz_kycgly", "biz_kyry"].includes(getRoleKey()), //是否是科研人员或者科研管理员
  isCfgadmin: () => getRoleKey() == "cfgadmin", //是否是配置管理员
  isLogadmin: () => getRoleKey() == "logadmin", //是否是审计管理员
  isPSZJ: () => getRoleKey() == "biz_pszj", //是否是评审专家 biz_pszj
};
//输入时限制金额 正数位最多5位 小数位最多6位 不包含负数
export const fomateNumber = (data, prop, val) => {
  let replacevalue =
    ("" + val) // 第一步：转成字符串
      .replace(/[^\d^\.]+/g, "") //将非数字和点转化为空字符串
      .replace(/^0+(\d)/, "$1") // 第三步：第一位0开头，0后面为数字，则过滤掉，取后面的数字
      .replace(/^\./, "0.") // 第四步：如果输入的第一位为小数点，则替换成 0. 实现自动补全
      .match(/^\d*(\.?\d{0,6})/g)[0] || ""; // 第五步：最终匹配得到结果 以数字开头，只有一个小数点，而且小数点后面只能有0到6位小数
  //限制金额不能大于10亿
  if (parseFloat(replacevalue) * 10000 > 1000000000) {
    const temp = replacevalue.split(".");
    if (temp[1]) {
      replacevalue = temp[0].slice(0, 5) + "." + temp[1];
    } else {
      replacevalue = temp[0].slice(0, 5);
    }
  }
  data[prop] = replacevalue;
};
//输入时限制金额 正数位最多5位 小数位最多6位 包含负数
export const fomateNegativeNumber = (data, prop, val) => {
  let replacevalue = ("" + val) // 第一步：转成字符串
    .replace(/[^\d^\.^\-]+/g, "") //将非数字、点、负号转化为空字符串
    .replace(/^0+(\d)/, "$1") // 第三步：第一位0开头，0后面为数字，则过滤掉，取后面的数字
    .replace(/^\./, "0.") // 第四步：如果输入的第一位为小数点，则替换成 0. 实现自动补全
    .match(/^-?(\d*)(\.?\d{0,6})/g)[0]; // 第五步：最终匹配得到结果 以数字开头，只有一个小数点，而且小数点后面只能有0到6位小数
  //限制金额不能大于10亿
  if (Math.abs(parseFloat(replacevalue)) * 10000 > 1000000000) {
    const temp = replacevalue.split(".");
    if (temp[1]) {
      replacevalue = temp[0].slice(0, 5) + "." + temp[1];
    } else {
      replacevalue = temp[0].slice(0, 5);
    }
  }
  data[prop] = replacevalue;
};
//四舍五入保留几位小数 默认两位
export const fiexdNumber = (val, num = 2) => {
  return Math.round(val * Math.pow(10, num)) / Math.pow(10, num);
};
